\documentclass[a4wide, 10pt]{report}
\usepackage[parfill]{parskip}    % Activate to begin paragraphs with an empty line rather than an indent

% Title Page
\title {\center{\textit{iSquirrel:} A semantic web, community-driven recommender system.}\\  \textbf{ Report One: Inception}}

\author {Avgoustinos Kadis, Navin Manash, Andreas Markitanis, \\* Andreas Matsikaris, Alexandros Michael}

\begin {document}
\maketitle

\section* {Synopsis}
The purpose of this project is to build a web recommender system for users that suggests new articles based on the ratings given by other users, the users' preferences and commonality with the users' friends or social networks. 

\section* {Key User Requirements \& Extensions}
\subsection*{User Requirements}
The following is a list of standard features and requirements the completed system should meet and if implemented should secure a grade B.
\\
\begin{itemize}
\item The user should be able to create a profile and specify their interests along with a ranking of the importance of each interest.
\item The system should keep a static and a dynamic profile of each user. The dynamic profile will change according to the feedback received from the user.
\item The system should make use of the semantic information of semantically tagged data stores such as DBpedia, to recommend Wikipedia articles to the users based on their profile.
\item The recommender should be community-driven. Each user will be able to authenticate into the system using a username and password.
\item A GUI capable of showing the recommendations in an easy-to-comprehend manner, as well as providing the user with tools to view and edit their profile.
\item A feedback module allowing the user to `LIKE' a recommended page. The feedback will then be taken into account to improve future recommendations. 
\item Each user will be able to add friends to their profile, thus building up a network. The system will then be able to recommend articles based on what the user's friends like.
\item The system will also be able to recommend articles based on the likeness of the user's profile with other users, not necessary friends in the network. 
\end{itemize}
\subsection*{Extensions}
The following is a list of additional features and requirements that if implemented satisfactorily will achieve grade A.
\\
\begin{itemize}
\item The system could integrate with Facebook via the Facebook API and gather key information about the user's network. That would help the user discover which of their Facebook friends use iSquirrel.
\item The system could be extended to recommend books, music and movies by using sources such as  Amazon, Last.fm and IMDB and their APIs respectively.
\item Along with a list of recommendations, the system could provide a ``Shuffle'' button giving the ability to the user to navigate to a random page (always in the lines of their profile and interests).
\item Using the community, the system can recommend friends to the user based on how close their profiles are.  
\item Provide a function for the users to compare their profile with random people in the network. That will allow the users to find people with common interests, befriend them, and thus enjoy a larger recommendation range.  
\end{itemize}

\section* {Choice of development method}

The team will accommodate the Scrum development method with a slight hint of Extreme Programming (XP). We will have 2-3 stand-up meetings per week where each team member will state their progress and difficulties with their current task thus making sure that all members do keep up with the project's velocity. A sprint planning meeting will be held at the beginning of each iteration where more requirements will be defined, the goals of the iteration will be decided and the software design models will be specified or re-factored. At the end of each iteration the team will perform integration and regression testing of the system as well as code reviews. Coding will mostly be done in pairs.

Our project will be hosted on Google Code as an open source project under the MIT Licence where everyone can track the project progress and status. Google Code Project Hosting comes with Subversion and provides us with a simple bug reporting interface and a wiki where the documentation will be composed. The main development will be done in the trunk and each new feature will be developed in separate branches. Tagging will be done at the end of each iteration, after integration and testing is completed. Unit tests and regression testing will be performed in all of the development phases. Testing will also be performed by various users to measure the performance, accuracy and usability of the system. Ideally, a user will be involved in each iteration.

The system will be built using a 3-tier technology; namely a client side, a server side and the database. We will use JavaServer Pages (JSP) for the server side and Javascript/HTML/XUL for client side. The reason for choosing JSP is that it is a very popular technology and most of the team members are unfamiliar with it, so it serves as a good chance to learn more about it. The client side will be implemented as a Firefox plugin, since we want the system to integrate smoothly with the user's browsing activity. For the database layer we will use PostgreSQL which is provided by the department. Tomcat will be the web server that will host our service and development will be done under Mac OS X and Linux. Frameworks and database access tools will be considered, in order to increase the team's efficiency and the project's reliability.

The specific tasks that each person will undertake, are to be decided on each sprint planning meeting, according to the person's interests and availability. Preliminary role assignments are as follows:   Andreas Markitanis and Navin Manash are responsible for implementing the user's static and dynamic profile, Andreas Matsikaris and Avgoustinos Kadis for the recommendation algorithms and Alexandros Michael for the user interface and information retrieval from internet resources i.e DBPedia, Facebook, Amazon etc. 

\section* {First Iteration Plan}
The first iteration is due to conclude on Monday 2nd November 2009.
\subsection*{Goals}
\begin{itemize}
\item Setup a Tomcat server to use Java servlets.
\item Initial model design and implementation of the User's profile class, as well as creating the database tables needed to store the static profile of the users and the URLs they liked.
\item Skeleton implementation of the GUI of the system. That includes setting up development Firefox profiles on all of the members' machines, as well as creating the manifest and install file for the extension. The general look and feel shall be decided, and implemented up to a certain working standard. The user will be able to view the extension (once installed) on the right hand corner of their browser. Clicking the extension will open up a mockup of the final screen. The user will be able to view their profile with the ability to edit it and add or delete interests. Recommendations will not be accessible at this point.
\item Partial implementation of the feedback module. The user will be able to "LIKE" a page through a button interface. That page will then get stored in the database. This information can be used to show data and statistics to our users about the interests of their circle of friends. The system at this point will be able to dump on the screen all the pages that the user has liked.
\item Complete implementation of the user registration and authentication system.  Since the system will be community-driven, the need for a multi-user environment arises. The system will register a user along with their interests and create the static part of their FOAF profile. The profile will include a dynamic part which will be implemented in later iterations.
\end{itemize}
\subsection*{Possible risks}
Our first iteration is of potentially low risk since most of the tasks are GUI-related or well-practiced by all the group members. We only identify a few hazardous points. First and foremost, we need to get accommodated with the new technologies needed to implement a Firefox extension, as well as Java Servlets and Hibernate. Secondly, although not so technical, the design of the user interface might prove to be a tricky point. The system will be used by a wide range of people; some of whom might be novice computer users. The system needs to be designed with usability and scalability in mind to avoid unnecessary re-factoring in future iterations. 
\section* {Progress Beyond First Iteration}
We have created a rough plan on how the development of the system will progress. Our recommendations module will comprise of 3 types of recommenders; Static, Dynamic and Community-Driven. It will also have modules for comparing and extending dynamic profiles and retrieving information from third parties such as Amazon.

\subsection*{Second Iteration}
\subsubsection*{Approximately from 2/11 to 13/11}
This iteration will see the development of the Static Recommender. Based on the user's static profile (i.e the user's expressed interests), we will be able to recommend Wikipedia pages. 

Additionally the iteration will deliver a Dynamic Profile Builder, according to the Wikipedia pages the user `LIKES'. We will extract information about each``liked" page from DBpedia and we will add them to the dynamic profile of the user. The Dynamic Profile Builder constitutes the corner stone for our Dynamic Recommender (see iteration 3).

Finally, using the Facebook API we will store in our system which users are friends of each other, with the ability for periodic updates. The GUI of the system will be extended to accomodate the prementioned additions. Testing will be performed with pre-calculated tests, on all core parts of the iteration.

\subsection*{Third Iteration}
\subsubsection*{Approximately from 13/11 to 24/11}
In this iteration we add support for a Dynamic Recommender. Using all the details the dynamic profile of a user includes, this recommender queries DBpedia using the interests of the user, examines the results and finds the ones that best match their dynamic profile. This recommender enables us to have more targeted recommendations, on a wider variety of subjects, since we don't have the limitations that come with a static profile.  

Another core target of this iteration is a Profile Comparer. We will implement an algorithm that given two users will find out how close the users are, based on common interests. Testing will be performed on randomly generated profiles, and will include a comparison between the recommended results and the profile of the user. The Profile Comparer will be tested on a wide variety of predefined user profiles and we will inspect the statistics it will generate.

\subsection*{Fourth Iteration}
\subsubsection*{Approximately from 24/11 to 7/12}
Our recommender system will be extended with the Community-Driven recommender. Using the Profile Comparer we will show recommendations about popular Wikipedia pages in our community. For each "liked" page, and given how close the user who "liked" it with the user who's seeking recommendations is, we will find out the most interesting pages to the user. 

Furthermore and as an extension, we will also add support for recommending friends to the user, using the Profile Comparer, as two people with common interests can make good friends. Additionally we will recommend books and music from Amazon and Last.Fm using their respective APIs. Finally the system will provide random-article recommendations on demand. Testing will be continuous and will be performed on a range of user profiles with different interests.

\end{document}
    
 